% 1. 加载.mat文件
load my_signal_with_noise5.mat;
%fs = data.fs; % 获取采样频率
%signal_noisy = data.signal_noisy; % 获取带噪声信号
% 2. 小波去噪
% 选择小波基，如 Daubechies 6 ('db6')
wavelet = 'db6';
% 进行小波分解，得到多个层次的系数  
level = 6; % 分解的层数
[C, L] = wavedec(signal_noisy, level, wavelet);
% 计算阈值
% 这里使用了平方根（能量阈值），可以根据需要调整
sigma = mad(signal_noisy, 1) / 0.6745; % 使用绝对中值离差（MAD）估计噪声的标准差
threshold = sigma * sqrt(2 * log(length(signal_noisy)));
% 对小波系数应用软阈值去噪
C_denoised = C; % 去噪后的系数
for i = 1:length(C)
C_denoised(i) = sign(C(i)) * max(abs(C(i)) - threshold, 0);
end
% 3. 使用去噪后的系数重建信号
signal_denoised = waverec(C_denoised, L, wavelet);
% 4. 绘图
t = (0:length(signal_noisy)-1) / fs; % 时间轴
% 绘制带噪声的信号
subplot(2, 1, 1);
plot(t, signal_noisy);
title('Noisy Signal');
xlabel('Time [s]');
ylabel('Amplitude');
% 绘制去噪后的信号
subplot(2, 1, 2);
plot(t, signal_denoised);
title('Denoised Signal');
xlabel('Time [s]');
ylabel('Amplitude');